﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using AgendaManager.AgendaService;

namespace AgendaManager
{
    public partial class frmBusquedaCaño : Form
    {
        //ToDo: Borrar.
        //AgendaService.Service1 ws = new AgendaService.Service1();

        List<Caño> caños = new List<Caño>();
        public ObraCaño ObraCaño { get; set; }
        public bool esObra { get; set; }
        public Obra Obra { get; set; }

        public frmBusquedaCaño()
        {
            InitializeComponent();
        }

        private void frmBusquedaCaño_Load(object sender, EventArgs e)
        {
            caños = ConnectHelper.ws.RetrieveEntities(new Caño { }, string.Empty).Cast<Caño>().ToList();

            caños = caños.OrderBy(x => x.Diametro)
                .ThenBy(x => x.Presion)
                .ThenBy(x => x.Rigidez)
                .ThenBy(x => x.Longitud).ToList();

            gvCaños.DataSource = caños;
            gvCaños.Columns["Id"].Visible = false;
        }

        private void btBuscar_Click(object sender, EventArgs e)
        {
            gvCaños.DataSource = null;
            caños = ConnectHelper.ws.RetrieveEntities(new Caño { }, Convert.ToString(numFiltro.Value)).Cast<Caño>().ToList();

            caños = caños.OrderBy(x => x.Diametro)
                .ThenBy(x => x.Presion)
                .ThenBy(x => x.Rigidez)
                .ThenBy(x => x.Longitud).ToList();

            gvCaños.DataSource = caños;
            gvCaños.Columns["Id"].Visible = false;
        }

        private void btRemove_Click(object sender, EventArgs e)
        {
            if (gvCaños.SelectedRows.Count == 1)
            {
                if (MessageBox.Show("Está seguro que desea eliminar el Caño seleccionado? \nTenga en cuenta que al eliminarlo lo estará haciendo de todas las obras.",
                            "Eliminar Caño.",
                            MessageBoxButtons.YesNo,
                            MessageBoxIcon.Exclamation) ==
                            System.Windows.Forms.DialogResult.Yes)
                {
                    Caño c = new Caño();
                    c = (Caño)gvCaños.SelectedRows[0].DataBoundItem;

                    bool result = ConnectHelper.ws.DeleteEntity(c);

                    if (result)
                    {
                        MessageBox.Show("El caño ha sido eliminado correctamente.",
                            "Eliminar Caño.",
                            MessageBoxButtons.OK,
                            MessageBoxIcon.Exclamation);

                        caños = caños.Where(x => x.Id != c.Id).ToList();
                        gvCaños.DataSource = caños;
                        gvCaños.Columns["Id"].Visible = false;
                    }
                    else
                    {
                        MessageBox.Show("Ha ocurrido un error intentando eliminar el caño. \nSi el problema persiste contacte al administrador del sistema..",
                            "Eliminar Caño.",
                            MessageBoxButtons.OK,
                            MessageBoxIcon.Exclamation);
                    }

                }    
            }
            else
            {
                MessageBox.Show("Por favor seleccione solo un caño.",
                            "Eliminar Caño.",
                            MessageBoxButtons.OK,
                            MessageBoxIcon.Exclamation);
            }
            
        }

        private void btEdit_Click(object sender, EventArgs e)
        {
            if (gvCaños.SelectedRows.Count == 1)
            {
                Caño c = new Caño();
                c = (Caño)gvCaños.SelectedRows[0].DataBoundItem;

                using (frmNuevoCaño f = new frmNuevoCaño())
                {
                    f.Caño = c;

                    if (f.ShowDialog() == System.Windows.Forms.DialogResult.OK)
                    {
                        caños = ConnectHelper.ws.RetrieveEntities(new Caño { }, string.Empty).Cast<Caño>().ToList();

                        gvCaños.DataSource = caños;
                        gvCaños.Columns["Id"].Visible = false;
                    }
                }
            }
        }

        private void btAdd_Click(object sender, EventArgs e)
        {
            using (frmNuevoCaño f = new frmNuevoCaño())
            {
                if (f.ShowDialog() == System.Windows.Forms.DialogResult.OK)
                {
                    caños = ConnectHelper.ws.RetrieveEntities(new Caño { }, string.Empty).Cast<Caño>().ToList();

                    gvCaños.DataSource = caños;
                    gvCaños.Columns["Id"].Visible = false;
                }
            }
        }

        private void btnSeleccionar_Click(object sender, EventArgs e)
        {
            if (gvCaños.SelectedRows.Count == 1)
            {
                if (Obra != null)
                {
                    using (frmObraCaño f = new frmObraCaño())
                    {
                        if (f.ShowDialog() == System.Windows.Forms.DialogResult.OK)
                        {
                            ObraCaño = new ObraCaño();

                            if (Obra.Id != null)
                                ObraCaño.IdObra = Obra.Id;

                            ObraCaño.IdCaño = ((Caño)gvCaños.SelectedRows[0].DataBoundItem).Id;
                            ObraCaño.Longitud = f.Longitud;
                        }
                    }

                    this.DialogResult = System.Windows.Forms.DialogResult.OK;
                    this.Close();
                }    
            }

        }
    }
}
